在ASP.NET MVC 5中,我們可以使用區域(Area)來將模型、控制器和頁面劃分為獨立的功能節點。
在一個ASP.NET MVC 項目中,可以存在多套不同的模型、控制器和頁面組合。
這樣做助於將大型軟件系統分解為多個功能節點
使用Visual Studio 創建一個ASP.NET MVC 時,項目的根目錄中將包含一套模型、控制器和視圖,
如下圖
如果專案比較龐大,
可以將圖中的MVC作為主要應用程序,
然後進一步劃分區域(Area),
每個區域又可以視為一個獨立的MVC組件,可用作分支應用程序。
這樣的組織方式有助於更好地管理和維護大型軟件專案。
建立區域
在 controllers 上 點選右鍵 –加入—控制器
下一步
選擇區域—MVC5區域
這邊區域名稱先取 branch
會自己產生 Aresa 的資料夾
branch 就在下方
在ASP.NET MVC 中,
所有區域都存放在根目錄下的"Areas"文件夾中。
每個區域都有一個以區域名稱命名的子文件夾,該子文件夾包含一個完整的MVC結構
在Areas\branch 文件夾中,
有3個子文件夾,分別是Controllers、Models和Views,這恰好對應了MVC結構中的三個必要元素:
Controllers(控制器):這個文件夾用於存放該區域的控制器。所有與branch區域相關的控制器都在這個文件夾中。
Models(模型):這個文件夾用於存放該區域的模型。所有與branch區域相關的模型都在這個文件夾中。
Views(視圖):這個文件夾用於存放該區域的頁面。所有與branch區域相關的頁面都在這個文件夾中。
對於我們剛剛新建的 branch 區域,該區域的路由是在Areas\branch文件夾下的
branchAreaRegistration.cs類文件中配置的。
區域路由的配置類文件的命名方式為
“區域名稱 + AreaRegistration.cs”。
區域路由的配置需要在特定的類別中進行,
這些類別需要繼承自 AreaRegistration 。
AreaRegistration 類別提供了在 ASP.NET MVC 應用程式中一個或多個區域的方式。
在這些類別中,需要覆寫兩個方法:
AreaName:這個方法用於獲取要的區域的名稱。
RegisterArea:使用指定區域的上下文資訊,在 ASP.NET MVC 應用程式中註冊該區域。
區域路由的配置工作通常在 RegisterArea() 方法中完成,
會使用 AreaRegistrationContext 類別的參數來註冊路由。
AreaRegistrationContext 類別封裝了在 ASP.NET MVC 應用程式中註冊特定區域所需的相關資訊。
路由配置解釋如下:
路由名稱為 branch_default。
路由模式為:branch/{controller}/{action}/{id}。
路由的預設值為 action 的值為 Index,id 為可選項。
需要注意的是,從路由模式來看,該路由的 URL 地址必須以 "branch" 開頭,也就是區域的名稱。
一旦區域路由在 RegisterArea() 方法中配置完成,還需要在 Global.asax 檔案中進行註冊。
Route 命名空間
命名空間對於 ASP.NET MVC 是相當重要的,
特別是在存在多個區域的情況下。
當整個專案中存在相同名稱的控制器時,
例如兩個區域中都有一個名稱為 "HomeController" 的控制器,甚至在專案的根目錄下也有相同名稱的控制器時,就會發生這種情況。
雖然可以為每個區域單獨註冊路由,但路由引擎需要在整個路由表中進行搜索。
如果我們指定了命名空間,路由引擎將僅在指定的命名空間內搜索路由。這樣可以縮小匹配路由時控制器的候選範圍,
只有在該命名空間中的控制器才有可能與該路由匹配。
在 ASP.NET MVC ,我們可以使用 MapRoute() 方法的 namespaces 參數,該參數的類型是 string[],用來指定命名空間的數組。這樣可以確保路由引擎僅在指定的命名空間中查找控制器,提高了路由的精確性。
在 MapRoute() 方法的第 4 個參數中使用了 new string[],
來指定一個陣列,其中包含了命名空間的值。
這個值可以是單個的命名空間,也可以是多個命名空間。
一旦指定了這些命名空間,路由引擎就會專注於這些命名空間內,僅在以下命名空間中查找控制器:
MVC30dayRoute.Route.Areas.branch.Controllers
這樣的做法可以提高路由引擎的搜索速度,因為它不需要在整個應用程序中搜索控制器,
而只需在指定的命名空間內進行搜索。這種精確的搜索方式有助於優化應用程序的性能。